package com.ys.作业;

/**
 * 描述:
 * 4.编写递归算法程序：一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求数列的第40位数是多少。
 *  递归调用分为两部分:
 *   出口--- 递归头  什么时候结束 递归
 *   入口-- 递归体 什么时候进入 递归
 * @author CodeYang
 * @version 2020/12/23 21:11
 */
public class 递归调用的斐波拉契数列04 {

    public static void main(String[] args) {
        int fibonacci = fibonacci(40);
        System.out.println(fibonacci);
        int fibonacci2 = fibonacci2(40);
        System.out.println(fibonacci2);

    }
    static int fibonacci(int num){
        // 递归头
        if (num == 1 || num == 2){
            return 1;
        }
        // 递归体
        return fibonacci(num-1)+fibonacci(num-2);
    }

    /**
     *  计算递归调用
     * @param num 递归次数
     * @return 斐波拉契数列 n >3 f(n)= f(n-1)+ f(n-2)
     */
    static int fibonacci2(int num){
        return num == 1 || num == 2 ? 1: fibonacci2(num-1)+fibonacci2(num-2);
    }
}
